"use strict"

/**
 * @uni项目应用的入口脚本
 * 类似于后端框架的app.js/server.js，实例化一个app框架
 *   1. 导入uni框架的各类参数/方法信息
 *   2. 创建uni框架实例app，并注册各类全局组件
 *   3. 注册一些全局方法（需以uni.xxx调用）
 */

// 导入App配置文件
import App from "./App.vue"
// 导入vue模块的构造方法
import { createSSRApp } from "vue"
// 导入状态管理器
import * as Pinia from "pinia"
// 导入全局组件
import headerComp from "./components/header-comp.vue"
import footerComp from "./components/footer-comp.vue"
import cardComp from "./components/card-comp.vue"
import sectionComp from "./components/section-comp.vue"
import readXlsxDataComp from "./components/read-xlsx-data-comp"

// 导出创建app实例的方法
export function createApp() {
  const app = createSSRApp(App)
  // 注册全局组件：pinia状态管理
  app.use(Pinia.createPinia())
  // 全局注册全局组件
  app
    // 页面头部组件
    .component("header-comp", headerComp)
    // 页脚组件
    .component("footer-comp", footerComp)
    // 卡片视图组件
    .component("card-comp", cardComp)
    // 区块视图组件
    .component("section-comp", sectionComp)
    // 读取xlsx数据文件组件
    .component("read-xlsx-data-comp", readXlsxDataComp)
  // 返回uni-app(@Vue)实例
  return { app, Pinia }
}


/**
 * 注册全局对象
 *   根路径 - uni.H5_ROUTER_BASE_PATH
 */
// 导入uni项目设置的根路径
import { h5 as manifestH5 } from "@/manifest.json"
// 注册根路径对象
uni.H5_ROUTER_BASE_PATH = manifestH5.router.base


/**
 * 注册全局方法：uni.loading()
 */
uni.loading = async (text) => {
  // 先声明一个等待50毫秒的方法
  async function wait50ms() {
    // 以Promise对象强行异步等待
    return new Promise((resolve) => {
      setTimeout(resolve, 50)
    })
  }
  // 显示加载圈
  await uni.showLoading({
    title: text,
    mask: true
  })
  // 等待50毫秒
  await wait50ms()
}

